# 1.1 整数（int）
# 定义：直接赋值整数
age = 25  # 年龄（无小数，用整数）
year = -3  # 可表示负数
big_num = 1000000000000000000000  # 支持超大整数

# 1.2 浮点数（float）
# 定义：直接赋值带小数的数字，或科学计数法
height = 1.75  # 身高（带小数，用浮点数）
weight = 65.5
science_num = 1.2e3  # 等价于1200.0（科学计数法）

# 1.3 复数（complex）
# 定义：实部+虚部j（虚部不能省略，即使为1也要写1j）
complex1 = 3 + 4j  # 实部3，虚部4
complex2 = -2j  # 实部0，虚部-2

# 数字类型使用场景示例：数学计算
print("年龄加5岁：", age + 5)  # 整数运算
print("BMI指数（体重/身高²）：", weight / (height **2))  # 浮点数运算
print("复数相加：", complex1 + complex2)  # 复数运算

# 2.1 列表（list）
# 定义：用[]包裹元素，元素间用逗号分隔（元素类型可不同）
student_names = ["张三", "李四", "王五"]  # 存储多个名字（有序，可修改）
scores = [90, 85.5, "缺考"]  # 支持混合类型

# 列表使用场景：需要动态修改的有序数据
student_names.append("赵六")  # 添加元素
scores[2] = 70  # 修改元素（将"缺考"改为70）
print("更新后的学生列表：", student_names)
print("第二个学生的成绩：", scores[1])  # 索引访问（从0开始）


# 2.2 元组（tuple）
# 定义：用()包裹元素（小括号可省略，但建议加上）
point = (3, 4)  # 存储坐标（有序，不可修改，适合固定数据）
person_info = ("Alice", 20, "female")  # 存储不可变的个人信息

# 元组使用场景：固定不变的有序数据（如配置、坐标）
x, y = point  # 解包（快速获取元素）
print("坐标的x值：", x)
# person_info[1] = 21  # 尝试修改会报错（元组不可变）


# 2.3 字典（dict）
# 定义：用{}包裹键值对，格式为{键1:值1, 键2:值2,...}（键唯一）
student = {
    "name": "张三",
    "age": 20,
    "scores": {"数学": 90, "英语": 85}  # 支持嵌套
}  # 存储键值对数据（适合表示对象属性）

# 字典使用场景：通过键快速访问值（如存储对象属性）
print("学生姓名：", student["name"])  # 通过键访问值
student["age"] = 21  # 修改值
student["gender"] = "男"  # 添加新键值对
print("更新后的学生信息：", student)


# 2.4 集合（set）
# 定义：用{}包裹元素（注意：空集合必须用set()，不能用{}）
fruits = {"苹果", "香蕉", "橙子", "苹果"}  # 自动去重
empty_set = set()  # 定义空集合

# 集合使用场景：去重、集合运算（交集、并集等）
other_fruits = {"香蕉", "葡萄", "西瓜"}
print("去重后的水果：", fruits)  # 输出：{'苹果', '香蕉', '橙子'}
print("两种水果的交集：", fruits & other_fruits)  # 输出：{'香蕉'}